const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ESLintPlugin = require('eslint-webpack-plugin');
const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
    //入口文件
    entry:path.resolve(__dirname, "../src/index.js"),
    //出口文件
    output:{
        path:path.resolve(__dirname, "../build"),
        filename:'./js/bundle.js'
    },
    //loader配置
    module: {
        rules: [{
            test: /\.css$/i,
            use: [MiniCssExtractPlugin.loader,'css-loader']
        },
        {
            test: /\.less$/i,
            use: [MiniCssExtractPlugin.loader,'css-loader','less-loader']
        },
        {
            test: /\.(png|jpg|gif|webp)$/,
            //asset 在导出一个 data URI 和发送一个单独的文件之间自动选择。代替之前的url-loader和file-loader
            type: "asset",
            parser: {
                dataUrlCondition: {
                    maxSize: 10 * 1024, // 小于15kb以下的图片会被打包成base64格式
                },
            },
            generator: {
                filename: 'images/[name][ext]'
            }
        }]
    },
    //插件
    plugins: [
        new MiniCssExtractPlugin({
            //相对于出口文件的相对路径
            filename: "./css/main.css"
        }),
        new HtmlWebpackPlugin({
            filename: "index.html",
            //以什么为模板 相对向当前路径
            template: "./public/index.html",
            //配置打包的html 规范
            minify: {
                collapseWhitespace: true,
                keepClosingSlash: true,
                removeComments: true,
                removeRedundantAttributes: true,
                removeScriptTypeAttributes: true,
                removeStyleLinkTypeAttributes: true,
                useShortDoctype: true
            }
        }),
        new ESLintPlugin({
            fix:true
        }),new CopyWebpackPlugin({
            patterns: [{
              from: "./public",
              to: "public",
              //配置复制时忽略的文件
              globOptions: {
                ignore: ["**/index.html"]
              }
            }],
          }),
        
    ],
    //配置css压缩
    optimization: {
        minimizer: [
          new CssMinimizerPlugin(),
        ],
        minimize: true,
      },
    mode:'production'
};